<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <button>点我</button>
</body>
<script>
    // {
    //     console.log(undefined === undefined);// true
    //     console.log(null === null);// true
    //     console.log(typeof undefined);// "undefined"
    //     console.log(typeof null);// "object"
    //
    //     console.log({} === {});// false
    //     const obj = {};
    //     // 1
    //     console.log(Object.keys(obj).length === 0);// true
    //     // 2
    //     console.log(JSON.stringify(obj) === "{}");// true
    // }

    {
        // Null的环境：
        // 对象原型链的终点
        // {
        //     // 1
        //     // let userName = "abc";
        //     // console.log(userName.__proto__ === String.prototype);// true
        //     // console.log(String.prototype.__proto__ === Object.prototype);// true
        //     // console.log(Object.prototype.__proto__);// null
        //     // console.log(userName.__proto__.__proto__.__proto__);// null
        //
        //     // 2
        //     // let obj = {};
        //     // console.log(obj.__proto__ === Object.prototype);// true
        //     // console.log(Object.prototype.__proto__);// null
        //     // console.log(obj.__proto__.__proto__);// null
        //
        //     // 3
        //     // let fn = function(){
        //     //
        //     // }
        //     // console.log(fn.__proto__ === Function.prototype);// true
        //     // console.log(Function.prototype.__proto__ === Object.prototype);// true
        //     // console.log(Object.prototype.__proto__);// null
        //     // console.log(fn.__proto__.__proto__.__proto__);// null
        //
        //     // 4
        //     function Box(){
        //         // 实例属性
        //         this.a = 1;
        //         // this.userName = "zhangsan";
        //     }
        //     Box.prototype.fn = function(){
        //         console.log("原型方法fn")
        //     }
        //     // Box.prototype.userName = "lisi";
        //     Object.prototype.userName = "wangwu";
        //
        //     const obj = new Box();
        //     console.log(obj.__proto__ === Box.prototype);// true
        //     console.log(Box.prototype.__proto__ === Object.prototype);// true
        //     console.log(Object.prototype.__proto__);// true
        //     console.log(obj.__proto__.__proto__.__proto__);// null
        //     console.log(obj.userName);
        //
        // }

        // 获取不到DOM元素
        // console.log(document.querySelector("button"));// null

        // storage
        // localStorage.userName = "zhangsan";
        // localStorage.setItem("age",100);
        // localStorage["sex"] = "男";
        //
        // localStorage.clear();
        // // localStorage.removeItem("age");
        // // localStorage.removeItem("sex");
        // // localStorage.removeItem("userName");
        // // delete localStorage.userName;
        // // delete localStorage.sex;
        // // delete localStorage.age;
        //
        // console.log(localStorage.userName);// undefined
        // console.log(localStorage["userName"]);// undefined
        // console.log(localStorage.getItem("userName"));// null
    }
    {
        // Null的使用场景：
        // * 作为函数的参数，当你不想传，或者是不需要传参数时，可以使用null.
        // {
        //     // function fn(a,b){
        //     //
        //     // }
        //     // fn(null,2);
        //
        //
        //     const p = new Promise(()=>{
        //
        //     })
        //     p.then(null,()=>{
        //
        //     })
        //     p.catch(()=>{
        //
        //     })
        // }

        // * 赋值
        // {
        //     let a = null;
        // }
    }
    {
        // 内存回收
        let a = 0;
        document.querySelector("button").onclick = function(){
            a++;
            console.log(this.innerText);
            if(a>=3){
                this.onclick  = null;
            }
        }
    }
</script>
</html>